package javase2.day07.demo01;
/*
包子铺类：线程类
设置线程任务：做包子
对包子状态判断：
    true：有包子
        wait等待
    false:没有包子
        做包子
        做好后更改包子状态为true
        并唤醒吃货线程吃包子
    注意：
        1.包子铺和吃货线程是互斥的，使用同步技术使其只能有一个在执行
        2.锁对象唯一：包子

 */
public class BaoZiPu extends Thread{
    //锁对象唯一：包子
    private BaoZi bz;

    //使用带参构造方法为包子赋值
    public BaoZiPu(BaoZi bz) {
        this.bz = bz;
    }

    //设置线程任务：做包子
    @Override
    public void run() {
        int count=0;
        while (true){
            //包子铺和吃货线程是互斥的，使用同步技术
            synchronized (bz){
                //对包子状态判断：
                if (bz.flag==true){
                    //true：有包子  wait等待
                    try {
                        bz.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                //false:没有包子 做包子
                if (count%2==0){
                    bz.pi="薄皮";
                    bz.xian="麻辣鸡肉馅";
                }else {
                    bz.pi="凉皮";
                    bz.xian="猪肉粉条馅";
                }
                count++;
                System.out.println("包子正在生产："+bz.pi+bz.xian+"的包子");
                //生产包子需要三秒
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                //做好后更改包子状态为true
                bz.flag=true;
                //并唤醒吃货线程吃包子
                bz.notify();
                System.out.println("包子生产好了："+bz.pi+bz.xian+"的包子"+"吃货可以开始吃了");
            }
        }
    }
}
